home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2324 / 2324.xpi / chrome / sessionmanager.jar / content / sessionmanager / preferencesOverlay.js < prev    next >
Encoding:
Text File  |  2009-11-04  |  11.8 KB  |  284 lines

  1. var gSessionManager_preferencesOverlay = {
  2.     init: function() {
  3.         window.removeEventListener("load", arguments.callee, false);
  4.         
  5.         // BrowserPreferences = Firefox, prefDialog = SeaMonkey
  6.         var prefWindow = document.getElementById('BrowserPreferences') || document.getElementById('prefDialog');
  7.         if (prefWindow)
  8.         {
  9.             // Add event handlers for when panes load in Firefox
  10.             var paneMain = document.getElementById('paneMain');
  11.             if (paneMain) paneMain.addEventListener("paneload", gSessionManager_preferencesOverlay.onPaneLoad_proxy, false);
  12.  
  13.             var panePrivacy = document.getElementById('panePrivacy');
  14.             if (panePrivacy) panePrivacy.addEventListener("paneload", gSessionManager_preferencesOverlay.onPaneLoad_proxy, false);
  15.             
  16.             // Add event handlers for SeaMonkey
  17.             var browserPane = document.getElementById('navigator_pane');
  18.             if (browserPane) browserPane.addEventListener("paneload", gSessionManager_preferencesOverlay.onPaneLoad_proxy, false);
  19.             
  20.             var securityPane = document.getElementById('security_pane');
  21.             if (securityPane) securityPane.addEventListener("paneload", gSessionManager_preferencesOverlay.onPaneLoad_proxy, false);
  22.             
  23.             // Handle case if pane is already loaded when option window opens.
  24.             gSessionManager_preferencesOverlay.onPaneLoad(prefWindow.lastSelected);
  25.         }
  26.     },
  27.     
  28.     onPaneLoad_proxy: function (aEvent) {
  29.         gSessionManager_preferencesOverlay.onPaneLoad(aEvent.target.id);
  30.         //aEvent.target.removeEventListener("paneload", arguments.callee, false);
  31.     },
  32.     
  33.     onPaneLoad: function (aPaneID) {
  34.         var elem = document.getElementById(aPaneID);
  35.         elem.removeEventListener("paneload", gSessionManager_preferencesOverlay.onPaneLoad_proxy, false);
  36.         switch (aPaneID) {
  37.             case "paneMain":
  38.             case "navigator_pane":
  39.                 this.onPaneMainLoad();
  40.                 break;
  41.             case "panePrivacy":
  42.             case "security_pane":
  43.                 this.onPanePrivacyLoad(aPaneID);
  44.                 break;
  45.         }
  46.     },
  47.  
  48. /* ........ paneMain .............. */
  49.     onPaneMainLoad: function (aPaneID) {
  50.         var stringBundle = Components.classes["@mozilla.org/intl/stringbundle;1"]
  51.                            .getService(Components.interfaces.nsIStringBundleService)
  52.                            .createBundle("chrome://sessionmanager/locale/sessionmanager.properties");
  53.         
  54.         // Firefox = browserStartupPage, SeaMonkey = startupPage
  55.         var startMenu = document.getElementById("browserStartupPage") || document.getElementById("startupPage");
  56.         var height = 0;
  57.         if (startMenu) {
  58.             var startup = gSessionManager.getPref("extensions.sessionmanager.startup", 0, true);
  59.             var menuitem = startMenu.appendItem(stringBundle.GetStringFromName("startup_load"), gSessionManager.STARTUP_LOAD());
  60.             height = height + parseInt(window.getComputedStyle(menuitem, null).height);
  61.             menuitem = startMenu.appendItem(stringBundle.GetStringFromName("startup_prompt"), gSessionManager.STARTUP_PROMPT());
  62.             height = height + parseInt(window.getComputedStyle(menuitem, null).height);
  63.             // Actually set preference so browser will pick up if user changes it
  64.             if (startup) {
  65.                 // Save current value
  66.                 var currentValue = document.getElementById("browser.startup.page").valueFromPreferences;
  67.             
  68.                 // Tell Session Manager Helper Component to ignore preference change below
  69.                 gSessionManager.mObserverService.notifyObservers(null, "sessionmanager:ignore-preference-changes", "true");
  70.                 document.getElementById("browser.startup.page").valueFromPreferences = ((startup == 1) ? gSessionManager.STARTUP_PROMPT() : gSessionManager.STARTUP_LOAD());
  71.                 gSessionManager.mObserverService.notifyObservers(null, "sessionmanager:ignore-preference-changes", "false");
  72.                 
  73.                 // Listen for window closing in case user cancels without applying changes
  74.                 window.addEventListener("unload", function() {
  75.                     window.removeEventListener("unload", arguments.callee, false);
  76.                     
  77.                     if (document.getElementById("browser.startup.page").valueFromPreferences <= gSessionManager.STARTUP_PROMPT()) {
  78.                         //dump("restoring preference\n");
  79.                         // Tell Session Manager Helper Component to ignore preference change below
  80.                         gSessionManager.mObserverService.notifyObservers(null, "sessionmanager:ignore-preference-changes", "true");
  81.                         document.getElementById("browser.startup.page").valueFromPreferences = currentValue;
  82.                         gSessionManager.mObserverService.notifyObservers(null, "sessionmanager:ignore-preference-changes", "false");
  83.                     }
  84.                 }, false);        
  85.             }
  86.         }
  87.         
  88.         // SeaMonkey needs window size to be fixed since the radio buttons take up space
  89.         if (document.getElementById("startupPage")) {
  90.             if (!isNaN(height)) window.innerHeight = window.innerHeight + height;
  91.         }
  92.    },
  93.  
  94. /* ........ panePrivacy .............. */
  95.  
  96.     onPanePrivacyLoad: function (aPaneID)    {
  97.            var clearNowBn = document.getElementById("clearDataNow");
  98.            if (clearNowBn && clearNowBn.getAttribute("oncommand").indexOf("gSessionManager") == -1) { 
  99.                clearNowBn.setAttribute("oncommand", "gSessionManager.tryToSanitize(); " + clearNowBn.getAttribute("oncommand"));
  100.             // SeaMonkey needs to have Session Manager added directly to preferences window
  101.             if (aPaneID == "security_pane") {
  102.                 gSessionManager.addMenuItem(aPaneID);
  103.             }
  104.         }
  105.     }
  106. }
  107.  
  108. // Attach sanitizing functions to gSessionManager
  109. gSessionManager.onLoad = function() {
  110. }
  111.  
  112. gSessionManager.onUnload = function() {
  113.     // Make it so the check box won't be checked the next time the user manually goes to clear 
  114.     // recent history in Mozilla 1.9.1 and above
  115.     if (this.mSanitizePreference == "privacy.cpd.extensions-sessionmanager") {
  116.         this.setPref(this.mSanitizePreference, false, true);
  117.     }
  118. }
  119.  
  120. gSessionManager.onWindowClose = function() {
  121. }
  122.  
  123. gSessionManager.addSanitizeItem = function () {
  124.     window.removeEventListener('load', gSessionManager.addSanitizeItem, true);
  125.     
  126.     var sessionManagerItem = {
  127.         clear : function() {
  128.             try {
  129.                 gSessionManager.sanitize();
  130.             } catch (ex) {
  131.                 try { Components.utils.reportError(ex); } catch(ex) {}
  132.             }
  133.         },
  134.         get canClear() {
  135.             return true;
  136.         }
  137.     }
  138.         
  139.     // Firefox
  140.     if (typeof Sanitizer == 'function') {
  141.         // Sanitizer will execute this
  142.         Sanitizer.prototype.items['extensions-sessionmanager'] = sessionManagerItem;
  143.     }
  144.     // SeaMonkey
  145.     else if (typeof Sanitizer == 'object') {
  146.         // Sanitizer will execute this
  147.         Sanitizer.items['extensions-sessionmanager'] = sessionManagerItem;
  148.     }
  149.     
  150.     // fix window height so we can see our entry
  151.     var smlb = document.getElementById("sessionmanager_listbox");
  152.     if (smlb) {
  153.         // Since other addons might insert their own check boxes above us, make sure we are visible.
  154.         var index;
  155.         for (var i=0; i<smlb.parentNode.children.length; i++) {
  156.             if (smlb.parentNode.children[i] == smlb) {
  157.                 index = i + 1;
  158.                 break;
  159.             }
  160.         }
  161.         
  162.         var currentHeight = smlb.parentNode.boxObject.height;
  163.         var boxHeight = smlb.parentNode.firstChild.boxObject.height;
  164.         
  165.         // Display our checkbox and any added above us if we aren't already displayed (in case other addons have the same idea)
  166.         if (currentHeight < (boxHeight * index)) {
  167.             smlb.parentNode.height = currentHeight + boxHeight * (index - 6);
  168.         }
  169.     }
  170.         
  171.     // don't leak
  172.     sessionManagerItem = null;
  173. }
  174.  
  175. gSessionManager.addMenuItem = function (aPaneID) {
  176.     var isSeaMonkey = (this.mApplication.name.toUpperCase() == "SEAMONKEY");
  177.     var doc = (isSeaMonkey && (typeof(aPaneID) != "undefined")) ? document.getElementById(aPaneID) : document;
  178.     var prefs = doc.getElementsByTagName('preferences')[0];
  179.     var checkboxes = doc.getElementsByTagName('checkbox')
  180.     var listboxes = doc.getElementsByTagName('listitem');
  181.     var lastCheckbox = (checkboxes.length) ? checkboxes[checkboxes.length -1] : null;
  182.     var lastListbox = (listboxes.length) ? listboxes[listboxes.length -1] : null;
  183.     if (prefs && (lastCheckbox || lastListbox)) // if this isn't true we are lost :)
  184.     {
  185.         var pref = document.createElement('preference');
  186.         // Firefox 3.5 and above only
  187.         if (!isSeaMonkey && this.mVersionCompare.compare(this.mPlatformVersion,"1.9.1a1pre") >= 0) {
  188.             if (window.location == "chrome://browser/content/sanitize.xul") {
  189.                 this.mSanitizePreference = "privacy.cpd.extensions-sessionmanager";
  190.             }
  191.             else {
  192.                 this.mSanitizePreference = "privacy.clearOnShutdown.extensions-sessionmanager";
  193.             }
  194.         }
  195.         pref.setAttribute('id', this.mSanitizePreference);
  196.         pref.setAttribute('name', this.mSanitizePreference);
  197.         pref.setAttribute('type', 'bool');
  198.         prefs.appendChild(pref);
  199.  
  200.         if (lastListbox) {
  201.             var listitem = document.createElement('listitem');
  202.             listitem.setAttribute('label', this.sanitizeLabel.label);
  203.             listitem.setAttribute('id', "sessionmanager_listbox");
  204.             listitem.setAttribute('type', 'checkbox');
  205.             listitem.setAttribute('accesskey', this.sanitizeLabel.accesskey);
  206.             listitem.setAttribute('preference', this.mSanitizePreference);
  207.             listitem.setAttribute('oncommand', "gSessionManager.confirm(this)");
  208.             if (typeof(gSanitizePromptDialog) == 'object') {
  209.                 listitem.setAttribute('onsyncfrompreference', 'return gSanitizePromptDialog.onReadGeneric();');
  210.             }
  211.             lastListbox.parentNode.appendChild(listitem);
  212.         }
  213.         else if (lastCheckbox) {
  214.             var check = document.createElement('checkbox');
  215.             check.setAttribute('label', this.sanitizeLabel.label);
  216.             check.setAttribute('accesskey', this.sanitizeLabel.accesskey);
  217.             check.setAttribute('preference', this.mSanitizePreference);
  218.             check.setAttribute('oncommand', "gSessionManager.confirm(this)");
  219.             if (typeof(gSanitizePromptDialog) == 'object') {
  220.                 check.setAttribute('onsyncfrompreference', 'return gSanitizePromptDialog.onReadGeneric();');
  221.             }
  222.             
  223.             if (lastCheckbox.parentNode.localName == "row") {
  224.                 var newRow = document.createElement('row');
  225.                 newRow.appendChild(check);
  226.                 lastCheckbox.parentNode.parentNode.appendChild(newRow);
  227.             }
  228.             else {
  229.                 lastCheckbox.parentNode.appendChild(check);
  230.             }
  231.         }
  232.  
  233.         // Firefox 3 only
  234.         if ((typeof(gSanitizePromptDialog) == 'object') && (this.mVersionCompare.compare(this.mPlatformVersion,"1.9.1a1pre") < 0))
  235.         {
  236.             pref.setAttribute('readonly', 'true');
  237.         }
  238.         
  239.         // SeaMonkey needs to sync preference when display pref window
  240.         if (isSeaMonkey) pref.updateElements();
  241.     }
  242. }
  243.  
  244. gSessionManager.tryToSanitize = function () {
  245.     var prefService = Components.classes["@mozilla.org/preferences-service;1"]
  246.                         .getService(Components.interfaces.nsIPrefBranch);
  247.     try {
  248.         var promptOnSanitize = prefService.getBoolPref("privacy.sanitize.promptOnSanitize");
  249.     } catch (e) { promptOnSanitize = true;}
  250.  
  251.     // if promptOnSanitize is true we call gSessionManager_Sanitizer.sanitize from Firefox Sanitizer
  252.     if (promptOnSanitize)
  253.         return false;
  254.  
  255.     try {
  256.         var sanitizeSessionManager = prefService.getBoolPref("privacy.item.extensions-sessionmanager");
  257.     } catch (e) { sanitizeSessionManager = false;}
  258.  
  259.     if (!sanitizeSessionManager)
  260.         return false;
  261.  
  262.     gSessionManager.sanitize();
  263.     return true;
  264. }
  265.  
  266. gSessionManager.confirm = function (aElem) {
  267.     if (!aElem.checked) return;
  268.  
  269.     var stringBundle = Components.classes["@mozilla.org/intl/stringbundle;1"]
  270.                        .getService(Components.interfaces.nsIStringBundleService)
  271.                        .createBundle("chrome://sessionmanager/locale/sessionmanager.properties");
  272.                        
  273.     var timeframe = document.getElementById("sanitizeDurationChoice");
  274.     var txt = stringBundle.GetStringFromName("delete_all_confirm") +
  275.               (timeframe ? (" - " + timeframe.label) : "");
  276.     
  277.     var okay = this.mPromptService.confirmEx(null, stringBundle.GetStringFromName("sessionManager"), txt, 
  278.                                              this.mPromptService.BUTTON_TITLE_YES * this.mPromptService.BUTTON_POS_0 + this.mPromptService.BUTTON_TITLE_NO * this.mPromptService.BUTTON_POS_1,
  279.                                              null, null, null, null, {});
  280.     aElem.checked = !okay;
  281. }
  282.  
  283. window.addEventListener("load", gSessionManager_preferencesOverlay.init, false);
  284.